#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
________________________________________________
 @Time    : 2018/6/5 上午9:32
 @Author  : NickTet
 @Site    : 
 @File    : UtilClass.py
 @Software: PyCharm
 _______________________________________________
 """


class LazyProperty(object):
    """
        懒加载，装饰器模式
        Python 对象的延迟初始化是指，当它第一次被创建时才进行初始化，或者保存第一次创建的结果，然后每次调用的时候直接返回该结果。
        定义了__get__()方法，所以它是一个描述符，当使用该描述符时则相当于调用get方法，动态给实例添加一个同名属性area，然后将计算出的值赋予给它

    """

    def __init__(self, func):
        self.func = func

    def __get__(self, instance, owner):
        if instance is None:
            return self
        else:
            value = self.func(instance)
            setattr(instance, self.func.__name__, value)
            return value


try:
    from configparser import ConfigParser  # py3
except:
    from ConfigParser import ConfigParser  # py2


class ConfigParse(ConfigParser):
    """
    从新configparser

    """

    def __init__(self):
        ConfigParser.__init__(self)

    # 重写optionxform方法，支持大写，默认都会调用这个方法
    def optionxform(self, optionstr):
        return optionstr


class Single(type):
    """
    元类生成单例类的方法

    """
    __inst = {}

    def __call__(cls, *args, **kwargs):
        if cls not in cls.__inst:
            cls.__inst[cls] = super(Single, cls).__call__(*args)
